A computer system may have a number of devices including video displays, speakers, printers, keyboards, pointing devices, and various ports including serial, parallel and network ports. The processor of the system typically communicates with the devices via one or more peripheral busses which transmit control, address and data bits. One such bus frequently used is the Peripheral Component Interconnect (PCI), a local bus standard. There are other bus standards.
Devices such as an input/output (I/O) devices are often connected to the computer system bus using another device typically referred to as an I/O controller or adapter, which facilitates communication between the system processor and another device. For example, a video adapter for a video display device, typically includes memory to temporarily store display information, logic to process display information and interface circuitry to transfer information between the bus and the adapter and between the adapter and the video display. Other examples of I/O controllers for devices include sound adapters, storage controllers, network controllers etc.
Some devices may include one or more integrated circuit chips which may be soldered or otherwise connected to a support which may include a main circuit board such as a motherboard. Other devices may be carried on one or more expansion boards or cards, each of which has a number of connectors which are received in a connector socket often referred to as an expansion slot. The connector sockets are typically mounted on the main circuit board or motherboard. Still other devices may be external devices connected by a cable or a wireless connection to an I/O port of the computer system.
When a computer system is first turned on or restarted, the system processor which may include one or more central processing units (CPUs), initializes itself. In this initialization, the system processor looks up its first instruction in a startup program such as a basic input/output system (BIOS) program, which is typically stored in nonvolatile memory such as a read-only-memory (ROM). The startup program, among other tasks, typically takes an inventory of the various busses and the devices coupled to the busses and checks the status of the devices to determine if the devices are working properly. Once the system processor has been initialized, an operating system is typically loaded from storage such as a hard drive in a boot sequence. The storage which contains a boot record which indicates to the system processor where to find the beginning of the operating system and the subsequent program file to initialize the operating system, is often referred to as the boot drive.
Upon initialization of the operating system, files of the operating system are copied into memory and the operating system typically takes over control of the boot process. At this point, the operating system often performs another inventory including an inventory of the devices coupled to the bus and loads the appropriate drivers to configure and otherwise control the devices. The operating system may reserve portions of the system memory for use by the inventoried devices.
To facilitate the inventory of the devices, many devices maintain in a nonvolatile memory, such as an electrically erasable programmable read-only memory (EEPROM), a configuration data structure containing device identification and other information useful for configuring the device. This information may include information sometimes referred to as vital product data (VPD). For example, a PCI device often has an EEPROM which stores a data structure often referred to as a “configuration header” which typically contains vendor identification, device identification, status, command, class code, memory, interrupt and possibly other information, depending upon the particular device.
The configuration data structure typically is placed within a configuration address space which permits the system processor to address the configuration data structure of each device to read or write configuration data. In addition to initial configuration, information within the configuration data structure may be accessed and updated during regular operation as well.
In some systems, the particular address space within the configuration address space assigned to the configuration data structure for a particular device may depend upon the location of the device. For example, the configuration data structure of a device may be placed in one location of the configuration address space if placed in one slot and may be placed in a different location of the configuration address space if placed in a different slot. In one system, the system processor can identify devices within the system by addressing appropriate locations within the configuration address space. If valid data is returned, the presence and identity of a device is detected at the associated circuit board or slot location. If the returned data is missing or invalid, the portion of the system associated with the particular configuration address space location may be deemed to be unoccupied by a properly operating device.